// 1.为什么要是proxy代理？
const person = {
    name: 'xm',
    get aliasName() { // 属性访问器
        return 'handSome' + this.name
    }
}
const proxy = new Proxy(person, {
    get(target, key, receiver) { // receiver:代理对象
        console.log(key)
        // return target[key]  // this = person
        return Reflect.get(target, key, receiver) // this = receiver
    },
    set(target, key, value, receiver) {
        // target[key] = value
        Reflect.set(target, key, value, receiver)
        return true
    }
})

// 一段伪代码
// effect(() => {
//     console.log(proxy.aliasName)
// })
proxy.name = 'xh'
// 此时我们修改了name，effect 内的 proxy.aliasName是不会触发更新的，但是proxy.aliasName是依赖name的，所以就会有问题

// 采用Reflect后，如果访问aliasName，紧接着会去取name，此时是在 receiver （代理对象）上取值，会再触发get方法
console.log(proxy.aliasName)
// 使用 target[key]， 不会打印name
// aliasName
// handSomexh

// 使用Reflect.get(target, key, receiver)
// aliasName
// name
// handSomexh
